package ioc

//解决在单元测试中无法测试的 demo,需要在 main 函数中调用

type TestFuncInfo struct {
	Name string
	Fun  func()
	//是否启动
	Start bool
	//分组
	Group string
}

var testFuncs = make(map[string]TestFuncInfo)

// 注册测试函数
func RegisterTestFunc(test TestFuncInfo) {
	//判断名称是否为空
	if test.Name == "" {
		panic("名称不能为空")
	}
	if _, ok := testFuncs[test.Name]; ok {
		panic(test.Name + "这个已经注册过了,不能重复注册")
	}
	testFuncs[test.Name] = test
}

// 执行某一个测试函数
func RunTestFuncByName(name string) {
	if test, ok := testFuncs[name]; ok {
		if test.Start {
			test.Fun()
		} else {
			panic(name + "这个测试函数没有启动")
		}
	}
}

// 执行测试函数
func RunTestAllFunc() {
	for _, test := range testFuncs {
		if test.Start {
			test.Fun()
		}
	}
}

// 按照分组执行测试函数
func RunTestFuncByGroup(group string) {
	for _, test := range testFuncs {
		if test.Start && test.Group == group {
			test.Fun()
		}
	}
}
